// 防止头文件被重复包含 || Prevent header file from being included multiple times
#ifndef ITEM_HH
#define ITEM_HH

// 包含字符串处理库（用于存储文字信息） || Include string library (for text handling)
#include <string>

// 物品属性结构体（包含一组相关属性的打包容器） || Item attribute structure (a packaged container of related properties)
struct Item {
    // ====== 物品属性定义 ====== || ====== Item Properties Definition ======
    std::string name;         // 名称（例如："王者之剑"） || Name (e.g., "King's Sword")
    std::string description;  // 描述（例如："传说中英雄使用的武器"） || Description (e.g., "Legendary weapon used by heroes")
    unsigned attackBonus;     // 攻击加成（数值越大攻击力越强） || Attack boost (higher value = stronger attack)
    unsigned defenseBonus;    // 防御加成（数值越大防护力越强） || Defense boost (higher value = better protection)
    unsigned healthBonus;     // 生命加成（数值越大血量越多） || Health boost (higher value = more HP)

    // ====== 物品创建方法 ====== || ====== Item Creation Method ======
    // 构造函数（创建新物品的配方） || Constructor (recipe for creating new items)
    Item(std::string n, std::string desc, unsigned atk, unsigned def, unsigned hp)
        : name(n),               // 设置物品名称 || Set item name
          description(desc),     // 设置物品描述 || Set item description
          attackBonus(atk),      // 设置攻击加成数值 || Set attack boost value
          defenseBonus(def),     // 设置防御加成数值 || Set defense boost value
          healthBonus(hp) {}     // 设置生命加成数值 || Set health boost value
    
    // ====== 物品复制功能 ====== || ====== Item Copy Function ======
    // 克隆方法（生成完全相同的副本物品） || Clone method (create identical copy of the item)
    Item* clone() const { 
        // new 关键字表示在内存中新开辟空间创建副本 || 'new' keyword allocates new memory space for the copy
        return new Item(
            name,            // 复制原物品名称 || Copy original name
            description,     // 复制原物品描述 || Copy original description
            attackBonus,     // 复制攻击加成值 || Copy attack boost
            defenseBonus,    // 复制防御加成值 || Copy defense boost
            healthBonus      // 复制生命加成值 || Copy health boost
        );
    }
};

// 结束头文件保护 || End of header guard
#endif // ITEM_HH